package beans;

import entidades.Usuario;
import excessoes.DAOException;
import excessoes.RNException;
import java.io.Serializable;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.ActionEvent;
import org.springframework.util.DigestUtils;
import rn.UsuarioRN;
import util.FacesUtil;

/**
 *
 * @author Marcelo Gomes Neto
 */
/*
@ViewScoped = Instancia do bean é criada e mantida enquanto o usuário estiver na página (por exemplo, com os manipuladores de eventos ou Ajax). Deve implementar Serializable.  Sobrevive entre chamadas da mesma página.
@SessionScoped = Criado um por sessão de cada usuário. Sobrevive entre requests de páginas diferentes
@ApplicationScoped = Criado um para toda a aplicação.
@RequestScoped = Escopo padrão. É criado a cada requisição. 
 */
@ManagedBean(name="cadastroUsuarioBean")
@RequestScoped
public class CadastroUsuarioBean implements Serializable
{
    private static final long serialVersionUID = -380438712460928244L;
    private Usuario usuario = new Usuario();
    private Date dataAtual; // Exibe a data atual no campo Data de Cadastramento ao incluir um novo usuário.
    private String confirmarSenha;
    private String senhaCriptografada;
    
    public CadastroUsuarioBean() {}

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
    
    public String getConfirmarSenha() {
        return confirmarSenha;
    }

    public void setConfirmarSenha(String confirmarSenha) {
        this.confirmarSenha = confirmarSenha;
    }
    
    public String getSenhaCriptografada() {
        return senhaCriptografada;
    }

    public void setSenhaCriptografada(String senhaCriptografada) {
        this.senhaCriptografada = senhaCriptografada;
    }
        
    public void prepararAdicionarUsuario(ActionEvent actionEvent){
        this.usuario = new Usuario();
    }
    
    public String voltarTelaLogin() {
        return "/publico/login.xhtml";
    }
    
    public String novo() throws DAOException {
        return "/publico/cadastro_usuarios.xhtml";
    }
    
    public String salvar() throws RNException, DAOException
    {
        try 
        {
            String senha = this.usuario.getSenha();
            String senhaCripto = DigestUtils.md5DigestAsHex(senha.getBytes());
        
            // salva o usuário
            UsuarioRN usuarioRN = new UsuarioRN();
            this.usuario.setSenha(senhaCripto);
            usuarioRN.salvar(this.usuario);
        }
        catch (Exception e) {
             FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Não foi possivel cadastrar usuário", ""));
        }
        this.usuario = new Usuario();
        return "VoltaTelaAnterior";
    }

    public Date getDataAtual() {
        this.dataAtual = new Date(System.currentTimeMillis());
        return dataAtual;
    }

    public void setDataAtual(Date dataAtual) {
        this.dataAtual = dataAtual;
    }
}